home *** CD-ROM | disk | FTP | other *** search
/ Aminet 25 / Aminet 25 (1998)(GTI - Schatztruhe)[!][Jun 1998].iso / Aminet / util / cli / ksc_In.lha / In.asm next >
Encoding:
Assembly Source File  |  1998-04-09  |  1.9 KB  |  112 lines

  1. ; In 1.1 : execute a command in a certain directory.
  2. ; by Kyzer/CSG
  3. ; $VER: In.asm 1.1 (09.04.98)
  4. ;
  5.     incdir    include:
  6.     include    lvo/exec_lib.i
  7.     include    lvo/dos_lib.i
  8.     include    dos/dos.i
  9.  
  10. stackf    MACRO    ; stack_symbol, stackelement_symbol
  11.     IFND    \1
  12. \1    set    0
  13.     ENDC
  14. \1    set    \1-4
  15. \2    equ    \1
  16.     ENDM
  17.  
  18.     stackf    stk, cmd    ; these two filled
  19.     stackf    stk, dir    ; by ReadArgs()
  20.     stackf    stk, rdargs    ; result of ReadArgs()
  21.     stackf    stk, fib    ; FileInfoBlock
  22. arg=dir
  23.  
  24. In    link    a5,#stk
  25.     move.l    4.w,a6
  26.     moveq    #20,d6
  27.     lea    dosname(pc),a1    ; dos.library v37+
  28.     moveq.l    #37,d0
  29.     jsr    _LVOOpenLibrary(a6)
  30.     move.l    d0,a6
  31.     tst.l    d0
  32.     beq    .nodos
  33.  
  34.     lea    templat(pc),a0
  35.     move.l    a0,d1
  36.     lea    arg(a5),a0
  37.     move.l    a0,d2
  38.     clr.l    (a0)+
  39.     clr.l    (a0)+
  40.     moveq    #0,d3
  41.     jsr    _LVOReadArgs(a6)
  42.     move.l    d0,rdargs(a5)
  43.     beq.s    .noargs
  44.  
  45.     moveq    #DOS_FIB,d1
  46.     moveq    #0,d2
  47.     jsr    _LVOAllocDosObject(a6)
  48.     move.l    d0,fib(a5)
  49.     beq.s    .nofib
  50.  
  51.     move.l    dir(a5),d1
  52.     moveq    #ACCESS_READ,d2
  53.     jsr    _LVOLock(a6)
  54.     move.l    d0,d7
  55.     move.l    d0,d1
  56.     beq.s    .nolock
  57.     move.l    fib(a5),d2
  58.     jsr    _LVOExamine(a6)
  59.     move.l    d7,d1
  60.     tst.l    d0
  61.     beq.s    .noexam
  62.  
  63.     move.l    fib(a5),a0
  64.     tst.l    fib_DirEntryType(a0)
  65.     bgt.s    .isdir
  66.     move.l    #ERROR_OBJECT_WRONG_TYPE,d1
  67.     jsr    _LVOSetIoErr(a6)
  68.     bra.s    .notdir
  69.  
  70. .isdir    move.l    d7,d1
  71.     jsr    _LVOCurrentDir(a6)
  72.     move.l    d0,d7
  73.  
  74.     move.l    cmd(a5),d1
  75.     moveq    #0,d2
  76.     jsr    _LVOSystemTagList(a6)
  77.     move.l    d0,d6
  78.  
  79.     move.l    d7,d1
  80.     jsr    _LVOCurrentDir(a6)
  81.     move.l    d0,d1
  82. .notdir
  83. .noexam    jsr    _LVOUnLock(a6)
  84. .nolock    moveq    #DOS_FIB,d1
  85.     move.l    fib(a5),d2
  86.     jsr    _LVOFreeDosObject(a6)
  87. .nofib
  88.  
  89. .noargs    move.l    rdargs(a5),d1
  90.     bne.s    .argsok
  91.     lea    info(pc),a0
  92.     move.l    a0,d1
  93.     jsr    _LVOPutStr(a6)    ; put info if args failed
  94.     move.l    rdargs(a5),d1
  95. .argsok    jsr    _LVOFreeArgs(a6)
  96.     jsr    _LVOIoErr(a6)
  97.     move.l    d0,d1
  98.     moveq    #0,d2
  99.     jsr    _LVOPrintFault(a6)
  100.     move.l    a6,a1
  101.     move.l    4.w,a6
  102.     jsr    _LVOCloseLibrary(a6)
  103. .nodos    move.l    d6,d0
  104.     unlk    a5
  105.     rts
  106.  
  107. dosname    dc.b    "dos.library",0
  108. templat    dc.b    "DIRECTORY/A,DO=COMMAND/A/F",0
  109.     dc.b    "$VER: "
  110. info    dc.b    "In 1.1 (09.04.98) by Kyzer/CSG",10
  111.     dc.b    "Usage: in <directory> do <command>",10,10,0
  112.